package si.banst.tecajnice.web.mbean;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;

import si.banst.tecajnice.ejb.TecajniceBeanRemote;
import si.banst.tecajnice.ejb.napake.NapakaPriPovprasevanju;
import si.banst.tecajnice.entitete.StatusAktivnosti;
import si.banst.tecajnice.entitete.Tecaj;
import si.banst.tecajnice.entitete.Tecajnica;
import si.banst.tecajnice.entitete.TecajnicaID;
import si.banst.tecajnice.entitete.VrstaTecajnice;
import si.banst.tecajnice.util.DateUtil;

@Named
public class TecajniceMBean {
	private static final Logger logger = Logger.getLogger(TecajniceMBean.class
			.getName());

	@EJB(lookup="corbaname:iiop:tecajnice.banst.si:2811#TecajniceBean")
	private TecajniceBeanRemote tecajniceBean;

	private List<VrstaTecajnice> seznamVrstTecajnic;

	private int sifraIzbraneVrstaTecajnice;

	private Tecajnica izbranaTecajnica;

	private Date izbranDatum;

	public TecajniceMBean() {
		super();
	}

	@PostConstruct
	public void init() {
		logger.info("Inicializiram TecajniceMBean");
		logger.fine("Pridobivam seznam vrst tečajnic");
		try {
			seznamVrstTecajnic = new ArrayList<VrstaTecajnice>();
			List<VrstaTecajnice> vseVrsteTecajnic = tecajniceBean.vrniVseVrsteTecajnic();
			for(VrstaTecajnice vt : vseVrsteTecajnic)
				if(vt.getStatusAktivnosti().equals(StatusAktivnosti.AKTIVEN))
					seznamVrstTecajnic.add(vt);
			if (seznamVrstTecajnic == null || seznamVrstTecajnic.isEmpty())
				throw new NapakaPriPovprasevanju("Seznam tečajnic je prazen.");
		} catch (NapakaPriPovprasevanju e) {
			logger.severe("Seznam tečajnic je prazen." + e.getMessage());
		}
	}

	public void poisciTecajnico() {
		logger.fine("Iščem tečajnico za datum " + izbranDatum + " in vrsto tečajne liste " + sifraIzbraneVrstaTecajnice);
		if(getIzbranDatum()==null){
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Tečajnice ni mogoče najti.", "Datum ni izbran."));
			return;
		}
		try {
			izbranaTecajnica = tecajniceBean.vrniTecajnico(new TecajnicaID(izbranDatum, sifraIzbraneVrstaTecajnice));
		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Napaka pri iskanju tečajnice.", e.getMessage()));
			logger.fine("Tecajnice za ta datum ni mogoče najti. "
					+ e.getMessage());
		} 
		if(izbranaTecajnica==null)
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Tečajnice ni mogoče najti.", "Izbran datum: " + getIzbranDatum() + ". Izbrana vrsta tecajnice: " + getSifraIzbraneVrstaTecajnice()));
	}

	public boolean isTecajnicaIzbrana() {
		if (izbranaTecajnica != null)
			return true;
		else
			return false;
	}

	public boolean isSrednjiTecajiNapolnjeni() {
		for(Tecaj t : izbranaTecajnica.getTecaji())
			if(t.getSrednjiTecaj() != null)
				return true;
		return false;
	}
	
	public boolean isNakupniTecajiNapolnjeni() {
		for(Tecaj t : izbranaTecajnica.getTecaji())
			if(t.getNakupniTecaj() != null)
				return true;
		return false;
	}
	
	public boolean isProdajniTecajiNapolnjeni() {
		for(Tecaj t : izbranaTecajnica.getTecaji())
			if(t.getProdajniTecaj() != null)
				return true;
		return false;
	}
	
	public Date getIzbranDatum() {
		return izbranDatum;
	}

	public void setIzbranDatum(Date izbranDatum) {
		this.izbranDatum = DateUtil.nastaviCasNaPolnoc(izbranDatum);
	}

	public List<VrstaTecajnice> getSeznamVrstTecajnic() {
		return seznamVrstTecajnic;
	}

	public Tecajnica getIzbranaTecajnica() {
		return izbranaTecajnica;
	}

	public int getSifraIzbraneVrstaTecajnice() {
		return sifraIzbraneVrstaTecajnice;
	}

	public void setSifraIzbraneVrstaTecajnice(int sifraIzbraneVrstaTecajnice) {
		this.sifraIzbraneVrstaTecajnice = sifraIzbraneVrstaTecajnice;
	}

}
